home *** CD-ROM | disk | FTP | other *** search
- {$R-,S+,I+,D+,T+,F-,V+,B-,N-,L+ }
- {$M 4096,0,0 }
-
- program interrupt_table (input,output);
-
- {
-
- A Program that displays all interrupt vectors.
-
- Version 1.00 - 03/10/88 - First release
-
- Kevin Mess
- PO Box 35
- Boulder City, NV 89005
- Compuserve 71121,3360
-
- }
-
- uses
- crt,dos,cursors; { Cursors unit as written by Scott Bussinger }
-
- const
- bell = ^G;
-
- type
- string4 = string [4];
- keyset = (ESC,PGUP,PGDN,nothing);
- pointer_rec = record
- case integer of
- 0 : (address : pointer);
- 1 : (offset, segment : word)
- end; { record }
- screentype = record
- position : array [1..4000] of byte;
- x,y : byte;
- end; { record }
- var
- vector : array [$00..$FF] of pointer_rec absolute $0000:0000;
- colorscreen : screentype absolute $B800:0000;
- monoscreen : screentype absolute $B000:0000;
- savedscreen : screentype;
- intnumber : byte;
- finished : Boolean;
-
- {*************************************}
-
- function hex (decimal : word) : string4;
-
- const
- hexdigit : array [$0..$F] of char = '0123456789ABCDEF';
-
- var
- temp : string4;
-
- begin
- temp := '';
- temp := hexdigit [ hi (decimal) div 16 ] +
- hexdigit [ hi (decimal) mod 16 ] +
- hexdigit [ lo (decimal) div 16 ] +
- hexdigit [ lo (decimal) mod 16 ] ;
- hex := temp
- end;
-
- {*************************************}
-
- procedure frame (x1,y1,x2,y2 : byte);
-
- const
- upperleft = #201;
- lowerleft = #200;
- upperright = #187;
- lowerright = #188;
- horizontal = #205;
- vertical = #186;
-
- var
- i : byte;
-
- begin
- gotoxy (x1-1,y1-1);
- write (upperleft);
- gotoxy (x2+1,y1-1);
- write (upperright);
- gotoxy (x1-1,y2+1);
- write (lowerleft);
- gotoxy (x2+1,y2+1);
- write (lowerright);
- for i := x1 to x2 do
- begin
- gotoxy (i,y1-1);
- write (horizontal);
- gotoxy (i,y2+1);
- write (horizontal)
- end;
- for i := y1 to y2 do
- begin
- gotoxy (x1-1,i);
- write (vertical);
- gotoxy (x2+1,i);
- write (vertical)
- end;
- end; { frame }
-
-
- {*************************************}
-
- procedure display_screen (first_intnumber : byte);
-
- var
- x,y,
- last_intnumber,
- intnumber : byte;
-
- begin { display_screen }
- last_intnumber := first_intnumber + $3F;
- x := 5;
- y := 1;
- for intnumber := first_intnumber to last_intnumber do
- with vector [intnumber] do
- begin
- gotoxy (x,y);
- write (copy(hex(intnumber),3,2),hex(segment):6,':',hex(offset));
- inc (y);
- if ((intnumber + 1) mod $10) = 0 then
- if intnumber <> last_intnumber then
- begin
- inc (x,19);
- y := 1
- end
- end; { with }
- end; { display_screen }
-
-
- {*************************************}
-
-
- function endkey : keyset;
-
- var
- anykey : char;
- exit : keyset;
-
- begin
- repeat
- exit := nothing;
- anykey := readkey;
- if anykey = #0 then
- anykey := readkey;
- case anykey of
- #27 : exit := ESC;
- #73 : exit := PGUP;
- #81 : exit := PGDN;
- else write (bell);
- end; { case }
- until exit in [ESC,PGUP,PGDN];
- endkey := exit
- end;
-
- {*************************************}
-
- procedure int_table (intnumber : byte);
-
- begin { int_table }
- if monodisplay then
- savedscreen := monoscreen
- else
- begin
- savedscreen := colorscreen;
- textcolor (white);
- textbackground (blue)
- end;
- savedscreen.x := wherex;
- savedscreen.y := wherey;
- makecursor (nocursor);
- frame (2,2,79,19);
- window (2,2,79,19);
- clrscr;
- gotoxy (12,18);
- write ('PgUp - Previous Page, PgDn - Next Page, Esc to Exit');
- finished := FALSE;
- repeat
- display_screen (intnumber);
- case endkey of
- PGUP : if intnumber >= $40 then
- dec (intnumber,$40)
- else
- intnumber := $C0;
- PGDN : if intnumber <= $80 then
- inc (intnumber,$40)
- else
- intnumber := $00;
- ESC : finished := TRUE
- end { case }
- until finished;
- window (1,1,80,25);
- if monodisplay then
- monoscreen := savedscreen
- else
- colorscreen := savedscreen;
- gotoxy (savedscreen.x,savedscreen.y);
- makecursor (restorecursor)
- end; { int_table }
-
- {*************************************}
-
-
- begin { main }
- intnumber := $00;
- int_table (intnumber)
- end. { main }